/******************************************************************************/
/* @ All Rights Reserved Copyright (C) 2014 broada,Ltd.                       */
/*                                                                            */
/*  NAME      = fix_core.h                                                    */
/*  NOTE      =                                                               */
/*  DATE      = 2014/09/28 by zhengxd                                         */
/******************************************************************************/
#ifndef _FIX_CORE_H_
#define _FIX_CORE_H_

#include "fix_base_type.h"

/*
 *  分片包数据
*/
typedef struct __st_L7_fragment_fix {

    int i_req_resp;                        /* 数据类型 */
    unsigned int ui_hd_len;               /* message header的数据长度 */
    unsigned int ui_bd_len;               /* message body的数据长度 */
    int i_new_flg;                         /* 数据块是否是新建的 */
    char *p_input_msg;                     /* 数据块 */
    unsigned int ui_input_size;           /* 数据块长度 */
    char *p_msg_type;                      /* message type */
    struct timeval st_start_timestamp;     /* 开始分片包的时间 */
    struct timeval st_end_timestamp;       /* 结束分片包的时间 */
} L7_fragment_fix;

/*
 *   L7session_fix 用于存放fix私有的session数据, 对应L7_session的p_session_private变量
 *    通用的username、session_starttime、session_stoptime
*/
typedef struct __st_L7session_fix {

    char *p_user_name;                      /* 登陆用户名 */
    struct timeval st_login;                /* 登陆时间 */
    Frlist_header st_ua101;                  /* 101模板 */
    Frlist_header st_ua102;                  /* 102模板 */
    Frlist_header st_ua103;                  /* 103模板 */
    Frlist_header st_ua104;                  /* 104模板 */
    Frlist_header st_ua201;                  /* 201模板 */
    Frlist_header st_ua202;                  /* 202模板 */
    Frlist_header st_ua3201;                 /* 3201模板 */
    Frlist_header st_ua3202;                 /* 3202模板 */
    Frlist_header st_ua3107;                 /* 3107模板 */
    Frlist_header st_ua3113;                 /* 3113模板 */
    Frlist_header st_ua3115;                 /* 3115模板 */
} L7session_fix;

/*
 *  fix请求
 *  对应L7_requestdata中的p_request_private数据
*/
typedef struct __st_L7_req_fix {

    unsigned long ul_request_bytes;
    unsigned long ul_send_time_us;
    unsigned long ul_req_sequence;
    char *p_msg_type;                      /* message type */
    Frlist_header st_param;                 /* 参数列表 */
    struct timeval st_start_timestamp;     /* 开始分片包的时间 */
    struct timeval st_end_timestamp;       /* 结束分片包的时间 */
} L7_req_fix;

/*
 *  fix响应
 *  解析response过程中的数据
*/
typedef struct __st_L7_resp_fix {

    Frlist_header st_param;                /* 参数列表 */
}L7_resp_fix;

/*
 *  fix私有数据
*/
typedef struct __st_L7session_fix_private {

    L7_fragment_fix *p_st_fragment;       /* 分片包数据 */
    L7session_fix *p_st_sess;             /* session数据 */
    L7_req_fix *p_st_req;                 /* request数据 */
    L7_resp_fix *p_st_resp;               /* response信息 */
} L7session_fix_private;

int fix_detect(Conntrack *p_st_conn, Apm_packet *p_st_packet);

int fix_analysis(Conntrack *p_st_conn
                , Apm_packet *p_st_packet
                , Frhash_header *p_st_hash_report);

int fix_session_destroy(void *p_private_session);

#endif



